package converter;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Erweitert die Produktklasse um DVD-spezifische Datenelemente wie Regisseure, Schauspieler und Formate.
 * 
 * @author Patrick Bauer
 */
public class DVDElement extends XMLElement {
    /**
     * Liste der Regisseure.
     */
    private ArrayList<String> regisseur = new ArrayList<String>();
    
    /**
     * Liste der Schauspieler.
     */
    private ArrayList<String> schauspieler = new ArrayList<String>();
    
    /**
     * Liste der Formate.
     */
    private ArrayList<String> format = new ArrayList<String>();
    
    /**
     * Das Studio.
     */
    private String studio = "";
    
    /**
     * Die Laufzeit.
     */
    private String laufzeit = "";
    
    /**
     * Die Dimension.
     */
    private String dimension = "";
    
    
    /**
     * Setzt das Studio.
     * 
     * @param studio das Studio
     */
    public void setStudio(String studio){
        this.studio = studio;
    }
    
    /**
     * Fuegt einen Schauspieler hinzu.
     * 
     * @param actor ein Schauspiler
     */
    public void setSchauspieler(String actor){
        this.schauspieler.add(actor);
    }
    
    /**
     * Setzt die Dimension.
     * 
     * @param dimension die Dimension.
     */
    public void setDimension(String dimension){
        this.dimension = dimension;
    }
    
    /**
     * Setzt die Laufzeit.
     * 
     * @param runtime die Laufzeit
     */
    public void setLaufzeit(String runtime){
        this.laufzeit = runtime;
    }
    
    /**
     * Fuegt ein Format hinzu.
     * 
     * @param format ein Format
     */
    public void setFormat(String format){
        this.format.add(format);
    }
    
    /**
     * Fuegt einen Regisseur hinzu
     * 
     * @param regisseur ein Regisseur
     */
    public void setRegisseur(String regisseur){
        this.regisseur.add(regisseur);
    }
    
    /**
     * Erweitert die Anzahl der unbekannten allgemeinen Datenelemente um unbekannte <br>
     * DVD-spezifische Datenelemente.
     * 
     * @return die Anzahl aller unbekannten Datenelemente
     */
    @Override
    public int countUnknown(){
        int i = super.countUnknown();
        
        if(this.studio.isEmpty()) {
            i++;
        }
        
        if(this.regisseur.isEmpty()) {
            i++;
        }
        
        if(this.schauspieler.isEmpty()) {
            i++;
        }
        
        return i;
    }
    
    
    /**
     * Schreibt das eigene DVD-Produkt Objekt in valider Form in die uebergebene XML Datei.
     * 
     * @param writer das Writer Objekt
     * @throws IOException wird geworfen bei Fehlern waehrend des Dateizugriffs 
     */
    @Override
    public void write(FileWriter writer) throws IOException {
        writer.write("\t\t\t<DVD>" + System.getProperty("line.separator"));
        
        //title
        if(this.title.isEmpty()) {
            writer.write("\t\t\t\t<Titel unbekannt=\"1\"></Titel>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<Titel unbekannt=\"0\">" + title.get(0).toString() + "</Titel>" + System.getProperty("line.separator"));
        }
        
        //studio
        if(this.studio.isEmpty()) {
            writer.write("\t\t\t\t<Studio unbekannt=\"1\"></Studio>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<Studio unbekannt=\"0\">" + this.studio + "</Studio>" + System.getProperty("line.separator"));
        }
        
        //regisseur
        if(this.regisseur.isEmpty()) {
            writer.write("\t\t\t\t<Regisseur unbekannt=\"1\"></Regisseur>" + System.getProperty("line.separator"));  
        } else {
            for(Object regisseurItem : this.regisseur.toArray()) {
                writer.write("\t\t\t\t<Regisseur unbekannt=\"0\">" + regisseurItem.toString() + "</Regisseur>" + System.getProperty("line.separator"));
            }
        }
        
        //schauspieler
         if(this.schauspieler.isEmpty()) {
            writer.write("\t\t\t\t<Schauspieler unbekannt=\"1\"></Schauspieler>" + System.getProperty("line.separator"));  
        } else {
            for(Object schauspielerItem : this.schauspieler.toArray()) {
                writer.write("\t\t\t\t<Schauspieler unbekannt=\"0\">" + schauspielerItem.toString() + "</Schauspieler>" + System.getProperty("line.separator"));
            }
        }
        
        super.writeEan(writer);        
        super.writeVeroeffentlicht(writer);
        
        
        //format
        if(!this.format.isEmpty()) {
            for(Object formatItem : this.format.toArray()) {
                writer.write("\t\t\t\t<Format>" + formatItem.toString() + "</Format>" + System.getProperty("line.separator"));
            }
        }
        
        //laufzeit
        if(!this.laufzeit.isEmpty()) {
            writer.write("\t\t\t\t<Laufzeit>" + this.laufzeit + "</Laufzeit>" + System.getProperty("line.separator"));
        }
        
        //dimension
        if(!this.dimension.isEmpty()) {
            writer.write("\t\t\t\t<Dimension>" + this.dimension + "</Dimension>" + System.getProperty("line.separator"));
        }
        
        writer.write("\t\t\t</DVD>" + System.getProperty("line.separator"));
    }
    
}
